import 'package:flutter/material.dart';

class MyApp4 extends StatefulWidget {
  MyApp4({super.key, required this.parentName});

  String parentName;

  // 1.当组件开始被创建时自动调用
  // 生命周期内只会执行一次
  @override
  State<MyApp4> createState() {
    print('---createState');
    return _MyApp4State();
  }
}

class _MyApp4State extends State<MyApp4> {
  String name = '张三';
  int age = 18;

  // 2.当组件被初始化时自动调用
  // 生命周期内只会执行一次；
  // 一般用于：对组件变量赋值，请求网络数据，更新状态
  // 但不支持async await这种写法
  @override
  void initState() {
    print('---initState');
    super.initState();
    name = widget.parentName;
  }

  // 3.状态组件的依赖项发生变化时调用，在两种情况下会调用：
  // ①调用initState会调用；
  // ②从其他对象中依赖的一些数据发生改变时
  // 支持async await写法，所以也常在这里请求数据
  @override
  void didChangeDependencies() {
    print('---didChangeDependencies');
    super.didChangeDependencies();
  }

  // 5.组件即将销毁时自动调用，可以监听组件是否即将被销毁
  // 只会执行1次
  @override
  void deactivate() {
    print('--- deactivate');
    super.deactivate();
  }

  // 6.释放组件内存资源时会自动调用，可以监听组件是否被彻底销毁
  void dispose() {
    print('---dispose');
    super.dispose();
  }

  // 4.组件状态更新时自动调用
  // 会执行多次
  @override
  Widget build(BuildContext context) {
    print('---build');
    return Scaffold(
      appBar: AppBar(
        // 这里fontSize的单位和鸿蒙中的vp类似，在不同的设备上显示不同的大小
        title: Text(
          'Flutter初体验',
          style: TextStyle(color: Colors.white, fontSize: 20),
        ),
        backgroundColor: Colors.pink,
        centerTitle: true,
      ),
      body: Center(
        child: Text('我叫$name，今年$age岁了。', style: TextStyle(fontSize: 25)),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            name = name + '!';
            age = age + 1;
          });
          print(age);
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
